發現我常常會把
ROS
和ROS2
混著用,這裡說明一下。
首先並沒有ROS1
這種說法,但ROS整個架構和第一代ROS
在寫Document實在很難區分。
所以以後在說架構時會用粗體ROS,至於在說版本時則用ROS
。
另外我會列出對應的ROS
指令,讓ROS2 Porting可以參考,實作時只需跑ROS2
的版本即可。
ROS2
中的Hiearachy(抱歉不太會翻譯,類似階級的概念?),是從 Workspace -> Package -> Node/Component(Nodelet in ROS
)。所以今天會來說明一下Package,順便帶過Workspace。
在ROS中,一般都是以一個專案為一個單位,並以資料夾打包起來,而這個資料夾就稱之為Workspace(ws
)。
這邊來個簡單的範例。首先我們會先打開Terminal(Ctrl
+Alt
+T
)創建一個資料夾,這邊用ros2_ws
來表示專案名稱,當然也可以任意命名:
mkdir ros2_ws
接著進入到workspace,並創建src
的資料夾用來放source code:
cd ros2_ws
mkdir src
#上述三行指令可以濃縮成一行:
mkdir -p ros2_ws/src
這樣就完成了你第一個ROS2專案! (誤
這邊附上ROS2
官方文件中提到一個Workspace應該會長的樣子,明天會實作到,你也以用tree -D 3 ros2_ws
跑跑看:
workspace_folder/
src/
cpp_package_1/
CMakeLists.txt
include/cpp_package_1/
package.xml
src/
py_package_1/
package.xml
resource/py_package_1
setup.cfg
setup.py
py_package_1/
...
cpp_package_n/
CMakeLists.txt
include/cpp_package_n/
package.xml
src/
用過ROS
的人應該會很熟悉catkin
這個ROS官方提供的Compiler Macro,可以幫助連接package之間的相依和支持在任意路徑下使用rosrun
, roslaunch
等CLI。
而在ROS2則改為colcon
,大體上使用方式與catkin
一樣。
Colcon 安裝須在 workspace的根目錄,也就是上面的ros2_ws
下執行。安裝完Source過後則可以再任意地方執行。
安裝src
底下所有的Package:ROS
catkin_make # opt1: ROS built in macro
catkin build # opt2: with python wrapped catkin tools
ROS2
colcon build
目前src還是空的,但build起來是沒問題的。
這邊要小抱怨一下
ROS2
(後面還會更多抱怨XD),catkin build
的介面很漂亮,會用顏色區隔不同的訊息幫助debug,colcon build
則是一整片白,看了眼睛超痛。
安裝特定PackageROS
catkin build <package1> <package2> ...
ROS2
colcon build --packages-select <package1> <package2> ...
執行完後會在workspace看到build
, install
, log
的資料夾,就是我們的binary executable files附帶ROS2
的指令包。
與ROS
最大的不同是,ROS
預設會產生build
, devel
資料夾,install
的話則是要另外指定才能啟用。另外setup.bash
的位置也不一樣,可以參考下面的指令去。
要使用ROS的指令去跑程式(ros2 run
, ros2 launch
等指令),會需要在terminal設定環境:
# ros2
cd ros2_ws
source install/setup.bash
# ros
source devel/setup.bash
Colcon最常用到的就是上面兩個指令,當然還有很多其他功能,像是更改CMake Build Type為Release
(下面有範例)等等,這邊就不再贅述。Colcon已經複雜到ROS為他 專門做一期視頻(X 專門寫一個Documentation(O,可以參考這個網站。
Build Type
設成Release
更改還滿常會用到的,可以大幅優化PCL, OpenCV等第三方API,筆記筆記
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select <package1> <package2> ...
至於Python則常用到symlink,可以避免每次修改script後要重新跑colcon build
colcon build --symlink-install --packages-select <package1> <package2> ...
不知不覺越寫越多,今天就先到這邊好了,Package留給明天。
功能 | ROS | ROS2 |
---|---|---|
Compiler Macro | Catkin | Colcon |
安裝Package | catkin_make 或catkin build |
colcon build |
預設產生資料夾 | build, devel, log | install, build, log |
source 位置 | devel/setup.bash |
install/setup.bash |
ROS指令 | rosrun , roslaunch ,... |
ros2 run , ros2 launch ,... |